package com.luchao.ptz.controller;

import com.alibaba.fastjson.JSONObject;
import com.luchao.ptz.pojo.PwThreads;
import com.luchao.ptz.pojo.PwTmsgs;
import com.luchao.ptz.pojo.ZblogPost;
import com.luchao.ptz.pojo.ZblogTag;
import com.luchao.ptz.repository.PwThreadsRepository;
import com.luchao.ptz.repository.PwTmsgsRepository;
import com.luchao.ptz.repository.ZblogPostRepository;
import com.luchao.ptz.repository.ZblogTagRepository;
import com.luchao.ptz.utils.HtmlUtil;
import com.luchao.ptz.utils.UbbtohtmlUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;

@RestController
public class TestController {

    @Autowired
    private PwThreadsRepository pwThreadsRepository;
    @Autowired
    private PwTmsgsRepository pwTmsgsRepository;
    @Autowired
    private ZblogPostRepository zblogPostRepository;
    @Autowired
    private ZblogTagRepository zblogTagRepository;


//    /**
//     * 第四步：
//     * 更新文章分类：
//     * 先整理原来分类》技术教程：2 网赚教程：27 编程技术：13 软件工具：3 影视资源：4 红黑学习：23 QQ技术：12  生活服务：6 其他资源：7
//     * 再整理新的分类》技术教程：3 网赚教程：4  编程技术：2  软件工具：5 影视资源：7 红黑学习：6  QQ技术：8   生活服务：9 其他资源：10
//     *
//     * @return
//     */
//    @GetMapping("/updatePostCate")
//    public String updatePostCate() {
//
//        return "ok";
//    }

    /**
     * 第三步：
     * 更新标签数量，更新文章里的标签。切勿重复执行
     *
     * @return
     */
    @GetMapping("/updateTagCount")
    public String updateTagCount() {
        //标签表
        List<ZblogTag> alltags = zblogTagRepository.getAll();
        Map<String, Integer> tagmap = alltags.stream().collect(Collectors.toMap(ZblogTag::getName, ZblogTag::getId, (key1, key2) -> key2));
        Map<Integer, ZblogTag> newtagmap = alltags.stream().collect(Collectors.toMap(ZblogTag::getId, Function.identity(), (key1, key2) -> key2));

        //原数据
        List<JSONObject> allInfolist = zblogPostRepository.getAllInfo();

        for (JSONObject jsonObject : allInfolist) {
            String tags = jsonObject.getString("tags");
            Integer postdate = jsonObject.getInteger("postdate");//发布时间戳

            tags.replaceAll("  ", " ");//2空格
            tags.replaceAll("   ", " ");//3空格
            tags.replaceAll("    ", " ");//4空格
            tags.replaceAll("     ", " ");//5空格
            tags.replaceAll("\t", " ");//5空格
            if (tags.length() != 0) {
                tags = tags.trim();
                String[] tagsssss = tags.split(" ");
                String newtagstr = "";
                for (int i = 0; i < tagsssss.length; i++) {
//                    System.out.println("--" + tagsssss[i]);
                    Integer tagid = tagmap.get(tagsssss[i]);
                    newtagstr += "{" + tagid + "}";
                    //更新tag数量
                    ZblogTag zblogTag = newtagmap.get(tagid);
                    if (null != zblogTag) {
                        zblogTag.setCount(zblogTag.getCount() + 1);
                        zblogTagRepository.save(zblogTag);
                    }
                }
                System.out.println("+++" + newtagstr);
                //根据时间戳查询相同的文章。更新
                ZblogPost postDate = zblogPostRepository.getByPostDate(postdate);
                postDate.setTag(newtagstr);
                zblogPostRepository.save(postDate);
            }
        }
        return "updateTagCount-ok";
    }


    /**
     * 第二步：
     * 处理标签插入库中
     *
     * @return
     */
    @GetMapping("/updateTag")
    public String updateTag() {
        List<ZblogTag> alltags = zblogTagRepository.getAll();
        if (alltags.size() > 20) {
            return "导入过了";
        }
        List<JSONObject> allInfolist = zblogPostRepository.getAllInfo();
        Set<String> setstr = new HashSet<>();
        for (JSONObject jsonObject : allInfolist) {
            String tags = jsonObject.getString("tags");
            tags.replaceAll("  ", " ");//2空格
            tags.replaceAll("   ", " ");//3空格
            tags.replaceAll("    ", " ");//4空格
            tags.replaceAll("     ", " ");//5空格
            tags.replaceAll("\\r|\\n|\\t", " ");//
            if (tags.length() != 0) {
                tags = tags.trim();
                String[] tagsssss = tags.split(" ");
                for (int i = 0; i < tagsssss.length; i++) {
                    System.out.println("--" + tagsssss[i]);
                    setstr.add(tagsssss[i]);
                }
            }
        }
        System.out.println("set 长度：" + setstr.size());

        //保存到标签表
        for (String s : setstr) {
            ZblogTag tag = new ZblogTag();
            tag.setName(s);
            tag.setOrder(0);
            tag.setType(0);
            tag.setCount(1);
            tag.setAlias("");
            tag.setGroup("");
            tag.setIntro("");
            tag.setTemplate("");
            tag.setMete("");
            zblogTagRepository.save(tag);
        }
        return "updateTag-ok";
    }


    /**
     * 第一步：
     * 处理文章、标题、时间插入库中
     *
     * @return
     */
    @GetMapping("/ptz")
    public String ptz() {
        List<ZblogPost> zlist = zblogPostRepository.getAll();
        if (zlist.size() > 100) {
            return "导入过了";
        }

        List<JSONObject> allInfolist = zblogPostRepository.getAllInfo();
        for (JSONObject jsonObject : allInfolist) {
            Integer tid = jsonObject.getIntValue("tid");
            String subject = jsonObject.getString("subject");
            String tags = jsonObject.getString("tags");
            String content = jsonObject.getString("content");
            Integer postdate = jsonObject.getInteger("postdate");
            Integer lastpost = jsonObject.getInteger("lastpost");
            Integer hits = jsonObject.getInteger("hits");
            Integer fid = jsonObject.getIntValue("fid");

            System.out.println(tid + "--" + subject);
            String newContent = UbbtohtmlUtil.UbbDecode(content);
            System.out.println(newContent);
            String clear_content = HtmlUtil.removeHtmlTag(newContent);
            System.out.println(clear_content);

            ZblogPost zb = new ZblogPost();
            //     * 先整理原来分类》技术教程：2 网赚教程：27 编程技术：13 软件工具：3 影视资源：4 红黑学习：23 QQ技术：12  生活服务：6 其他资源：7
            //     * 再整理新的分类》技术教程：3 网赚教程：4  编程技术：2  软件工具：5 影视资源：7 红黑学习：6  QQ技术：8   生活服务：9 其他资源：10
            if (2 == fid) {
                zb.setCateId(3);
            } else if (27 == fid) {
                zb.setCateId(4);
            } else if (13 == fid) {
                zb.setCateId(2);
            } else if (3 == fid) {
                zb.setCateId(5);
            } else if (4 == fid) {
                zb.setCateId(7);
            } else if (23 == fid) {
                zb.setCateId(6);
            } else if (12 == fid) {
                zb.setCateId(8);
            } else if (6 == fid) {
                zb.setCateId(9);
            } else if (7 == fid) {
                zb.setCateId(10);
            } else {
                zb.setCateId(1);//默认分类
            }
            zb.setAuthorId(1);    //作者id
            zb.setTag("");
            zb.setStatus(0);
            zb.setType(0);
            zb.setAlias("");
            zb.setIstop(0);
            zb.setIslock(0);
            zb.setTitle(subject);

            if (clear_content.length() < 100) {
                zb.setIntro(newContent);
            } else {
                zb.setIntro(clear_content.substring(0, 100));  //摘要
            }
            zb.setContent(newContent);
            zb.setCreatetime(postdate);   //创建时间
            zb.setPosttime(postdate);
            zb.setUpdatetime(lastpost);    //更新时间
            zb.setCommnums(0);
            zb.setViewnums((hits));   //阅读数量
            zb.setTemplate("");
            zb.setMete("");

            zblogPostRepository.save(zb);
        }
        return "ptz-ok";
    }

    @GetMapping("/getAllPwTmsgs")
    public String getAllPwTmsgs() {
        List<PwTmsgs> pwlist = pwTmsgsRepository.getAll();
        return pwlist.size() + "";
    }

    @GetMapping("/getAllPwThreads")
    public String getAllPwThreads() {
        List<PwThreads> pwlist = pwThreadsRepository.getAll();
        return pwlist.size() + "";
    }

    @GetMapping("/getAllZblog")
    public String getAllZblog() {
        List<ZblogPost> zlist = zblogPostRepository.getAll();
        return zlist.size() + "";
    }

    @GetMapping("/test")
    public String test() {
        return "hello wrold";
    }


}
